home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 5
/
Aminet 5 - March 1995.iso
/
Aminet
/
game
/
shoot
/
Fme.lha
/
Fme
/
Source
/
gels.c
< prev
next >
Wrap
C/C++ Source or Header
|
1988-08-15
|
5KB
|
164 lines
#include "exec/types.h"
#include "exec/memory.h"
#include "graphics/gfxbase.h"
#include "graphics/gels.h"
#include "intuition/intuition.h"
#include "functions.h"
MakeGelsInfo(rp)
struct RastPort *rp;
{
struct GelsInfo *g;
struct VSprite *HeadSprite, *TailSprite;
g = (struct GelsInfo *)AllocMem(sizeof(struct GelsInfo),
MEMF_PUBLIC | MEMF_CLEAR);
rp->GelsInfo = g;
g->sprRsrvd = 0x00;
g->nextLine = (WORD *)AllocMem(8 * sizeof(WORD),
MEMF_PUBLIC | MEMF_CLEAR);
g->lastColor = (WORD **)AllocMem(8 * sizeof(LONG),
MEMF_PUBLIC | MEMF_CLEAR);
g->collHandler = AllocMem(sizeof(struct
collTable),MEMF_PUBLIC | MEMF_CLEAR);
g->leftmost = 0;
g->rightmost = rp->BitMap->BytesPerRow * 8 - 1;
g->topmost = 0;
g->bottommost = rp->BitMap->Rows - 1;
HeadSprite = (struct VSprite *)AllocMem(sizeof(struct VSprite),
MEMF_PUBLIC | MEMF_CLEAR);
TailSprite = (struct VSprite *)AllocMem(sizeof(struct VSprite),
MEMF_PUBLIC | MEMF_CLEAR);
InitGels(HeadSprite, TailSprite, g);
}
/* ======================================================================== */
/* ==== DeleteGelsInfo ==================================================== */
/* ======================================================================== */
DeleteGelsInfo(g)
struct GelsInfo *g;
{
if(g)
{
if(g->nextLine)FreeMem(g->nextLine, 8 * sizeof(WORD));
if(g->lastColor)FreeMem(g->lastColor, 8 * sizeof(LONG));
if(g->collHandler)FreeMem(g->collHandler,
sizeof(struct collTable));
if(g->gelHead)FreeMem(g->gelHead, sizeof(struct VSprite));
if(g->gelTail)FreeMem(g->gelTail, sizeof(struct VSprite));
FreeMem(g, sizeof(struct GelsInfo));
}
}
/* ======================================================================== */
/* ==== MakeVSprite ======================================================= */
/* ======================================================================== */
struct VSprite *
MakeVSprite(x, y, vsheight, vswidth, vsdepth, vsimage, vscolors)
WORD x, y;
WORD vsheight, vswidth, vsdepth;
WORD *vsimage;
WORD *vscolors;
{
int i;
struct VSprite *vs;
vs = (struct VSprite *)AllocMem(sizeof(struct VSprite),
MEMF_PUBLIC | MEMF_CLEAR);
vs->Flags = VSPRITE;
vs->X = x;
vs->Y = y;
vs->Height = vsheight;
vs->Width = vswidth;
vs->Depth = vsdepth;
vs->ImageData = (WORD *)AllocMem(vsheight * vswidth * vsdepth *
sizeof(WORD), MEMF_CHIP);
for(i = 0; i < (vsheight * vswidth * vsdepth); i++)
vs->ImageData[i] = vsimage[i];
vs->SprColors = vscolors;
return(vs);
}
/* ======================================================================== */
/* ==== DeleteVSprite ===================================================== */
/* ======================================================================== */
DeleteVSprite(vs)
struct VSprite *vs;
{
if(vs)
{
if(vs->VSBob)
{
RemBob(vs->VSBob);
if(vs->VSBob->SaveBuffer)FreeMem(vs->VSBob->SaveBuffer,
vs->Height * vs->Width * vs->Depth * sizeof(WORD));
FreeMem(vs->VSBob, sizeof(struct Bob));
}
RemVSprite(vs);
if(vs->ImageData)FreeMem(vs->ImageData,
vs->Height * vs->Width * vs->Depth * sizeof(WORD));
if(vs->BorderLine)FreeMem(vs->BorderLine,
vs->Width * sizeof(WORD));
if(vs->CollMask) FreeMem(vs->CollMask,
vs->Height * vs->Width * sizeof(WORD));
FreeMem(vs, sizeof(struct VSprite));
}
}
/* ======================================================================== */
/* ==== MakeBob =========================================================== */
/* ======================================================================== */
struct VSprite *
MakeBob(x, y, bheight, bwidth, bdepth, bimage, pp, poo)
WORD x, y;
WORD bheight, bwidth, bdepth;
WORD *bimage;
BYTE pp, poo;
{
struct Bob *b;
struct VSprite *v;
v = MakeVSprite(x, y, bheight, bwidth, bdepth, bimage, NULL);
b = (struct Bob *)AllocMem(sizeof(struct Bob),
MEMF_PUBLIC | MEMF_CLEAR);
v->VSBob = b;
b->BobVSprite = v;
v->PlanePick = pp;
v->PlaneOnOff = poo;
v->Flags = OVERLAY | SAVEBACK;
v->BorderLine = (WORD *)AllocMem((bwidth * sizeof(WORD)),
MEMF_PUBLIC | MEMF_CLEAR);
v->CollMask = (WORD *)AllocMem((sizeof(WORD) * bheight * bwidth),
MEMF_CHIP | MEMF_CLEAR);
b->SaveBuffer = (WORD *)AllocMem(bheight * bwidth * bdepth *
sizeof(WORD), MEMF_CHIP | MEMF_CLEAR);
b->ImageShadow = v->CollMask;
InitMasks(v);
return(v);
}